import streamlit as st
import pandas as pd
import os
import sys
import traceback

# 添加项目根目录到Python路径
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

# 导入项目模块
from data.fetcher import FinancialDataFetcher
from data.processor import FinancialDataProcessor
from visualization.charts import FinancialCharts

def fix_app_issue():
    """修复Streamlit应用中获取600900数据失败的问题"""
    print("\n===== 修复Streamlit应用获取600900数据失败问题 =====")
    
    # 初始化组件
    fetcher = FinancialDataFetcher()
    processor = FinancialDataProcessor()
    
    # 测试完整流程
    stock_code = "600900"
    report_type = "年报"
    
    print(f"\n1. 测试获取股票 {stock_code} 的{report_type}数据...")
    try:
        # 获取原始数据
        raw_data = fetcher.fetch_balance_sheet(stock_code, report_type)
        
        if raw_data is None or raw_data.empty:
            print(f"✗ 获取原始数据失败: 返回空数据")
            return
        
        print(f"✓ 原始数据获取成功! 数据形状: {raw_data.shape}")
        print("原始数据列名:", list(raw_data.columns)[:10], "..." if len(raw_data.columns) > 10 else "")
        
        # 保存原始数据
        raw_file_path = fetcher.save_to_local(raw_data, stock_code, report_type)
        print(f"✓ 原始数据已保存到: {raw_file_path}")
        
        # 按自定义分类处理数据
        print("\n2. 测试数据分类处理...")
        categorized_data = processor.categorize_data(raw_data)
        
        if categorized_data is None or categorized_data.empty:
            print(f"✗ 数据分类处理失败: 返回空数据")
            print("原始数据预览:")
            print(raw_data.head())
            return
        
        print(f"✓ 数据分类成功! 数据形状: {categorized_data.shape}")
        print("分类数据列名:", list(categorized_data.columns))
        print("分类数据预览:")
        print(categorized_data.head())
        
        # 保存分类后的数据
        processed_file_path = os.path.join(
            "data/processed",
            f"{stock_code}_{report_type}_categorized.csv"
        )
        os.makedirs(os.path.dirname(processed_file_path), exist_ok=True)
        processor.save_categorized_data(categorized_data, processed_file_path)
        print(f"✓ 分类数据已保存到: {processed_file_path}")
        
        # 测试图表生成
        print("\n3. 测试图表生成...")
        charts = FinancialCharts()
        try:
            fig = charts.create_category_bar_chart(categorized_data)
            print("✓ 图表生成成功!")
        except Exception as e:
            print(f"✗ 图表生成失败: {e}")
            traceback.print_exc()
        
        print("\n===== 测试完成 =====")
        print("整个流程测试成功，应用程序应该能够正常处理600900的数据")
        print("如果Streamlit应用仍然报错，可能是以下原因:")
        print("1. 会话状态管理问题")
        print("2. UI组件交互问题")
        print("3. 网络连接不稳定")
        print("4. 数据格式与预期不符")
        
    except Exception as e:
        print(f"✗ 测试过程中发生错误: {e}")
        traceback.print_exc()

if __name__ == "__main__":
    fix_app_issue()